Skip to main content

Restful API与GraphQL

默认所有同学都已非常熟悉Restful APl。而GraphQL大家可能比较陌生,会放慢节奏。

而GraphQL是和Restful API完全不同的两种设计和实现方式,两者也尽量不要混用(虽然混用也能做到无 bug)

什么是 GraphQL

GraphQL - Graph Query Language图查询语言。意思是擅长处理"图"数据结构的查询,即多个数据对象,各个之间还有关联关系。

核心概念:

  • schema - 数据规范
  • rootValue - 数据源

代码演示,可参考中文官网。注意,在此不要深入进去,还是沿着课程主线走。

var express = require('express') ;
var graphqlHTTP = require('express-graphql');
var { buildSchema } = require('graphql');

// 使用GraphQL Schema Language创建一个schema
var schema = buildSchema(`
type Query {
hello: String
}
`);

var rootValue = { hello: () => 'Hello world!' };

var app = express();
app.use('/graphql', graphqlHTTP({
schema: schema,
rootValue: rootValue,
graphiql: true,
}));
app.listen(4000, () => console.log('Now browse to localhost:4000/graphql'));

另外,虽然GraphQL主要用于查询,但它也支持输入和更新,参考官网 input和Mutation。课程就不在继续扩展了。

GraphQL 的应用场景

  • 数据关系比较复杂。PS︰和我们正好相反,我们是作品的数据结构复杂(前端编辑器复杂),而数据实体之间的关系比较清晰。前端查询需求多变,如果用Restful API会导致频繁的修改API,不灵活。
  • 有一个独立的数据提供方,对接很多使用方,不能——定制开发

如何选择

选择使用Restful API,放弃GraphQL 。

  • 并不匹配它的使用场景
  • 考虑它的缺点∶
  • 学习使用成本高,不如Restful API普及
  • 当数据结构复杂时,效率较低
  • 维护数据源和 schema 也比较复杂